﻿using System;
using System.Collections.Generic;
using ConfOrm;
using ConfOrm.NH;

namespace NHDay_Linq.ConfORM
{
	/// <summary>
	/// The module mapping.
	/// </summary>
	public interface IDomainMapping
	{
		/// <summary>
		/// Add the module's ORM definition, defines the basic aspects of the mapping.
		/// </summary>
		/// <param name="orm">The orm. </param>
		void DomainDefinition(ObjectRelationalMapper orm);

		/// <summary>
		/// The register patterns-appliers of the mappings.
		/// </summary>
		/// <param name="mapper">The mapper.</param>
		/// <param name="domainInspector">The domain inspector.</param>
		void RegisterPatterns(Mapper mapper, IDomainInspector domainInspector);

		/// <summary>
		/// Specific mapping customizations
		/// </summary>
		/// <param name="mapper">The mapper.</param>
		void Customize(Mapper mapper);

		/// <summary>
		/// Returns all the entities.
		/// </summary>
		/// <returns>
		/// All entities, to map, for the specific module.
		/// </returns>
		IEnumerable<Type> GetEntities();
	}
}
